﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
using System.Data;
using System.Data.SqlClient;
using Crosland.Automotriz.Entidad;

namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Log_Vehiculo_Armado
    {
        private readonly AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();
        private readonly DM_CROSLAND_20130417Entities ContextoEntidad = new DM_CROSLAND_20130417Entities();

        public IEnumerable<Object> ListarCentros()
        {

            try
            {
                IEnumerable<Object> Lista = new List<Object>();
                var q = from c in ContextoDeObjs.T_OPE_MAE_EQUIPOS_CAB
                        join d in ContextoDeObjs.TD_CENTRO
                        on c.ID_CENTRO equals d.ID_CENTRO
                        select new
                        {
                            d.ID_CENTRO,
                            d.DES_CENTRO
                        };
                    
                Lista = q.ToList().Distinct();

                return Lista;

            }
            catch (Exception)
            {

                throw;
            }



        }

        public List<T_LOG_VEHICULOS_ARMAR> BuscarVehiculosArmar(int idCentro,string nroMotorChasis)
        {

            var p = new object[] { new SqlParameter("@ID_CENTRO",idCentro),new SqlParameter("@VIN_MOTOR",nroMotorChasis) };
            var resultado = ContextoEntidad.ExecuteStoreQuery<T_LOG_VEHICULOS_ARMAR>("exec USP_BUSCAR_VEHICULOS @ID_CENTRO,@VIN_MOTOR", p).AsQueryable().ToList();
            return resultado;

        }


		public List<T_LOG_VEHICULOS_ARMAR> BuscarVehiculosEncajPendiente(string nroMotor)
		{

			var p = new object[] { new SqlParameter("@NRO_MOTOR", nroMotor) };
			var resultado = ContextoEntidad.ExecuteStoreQuery<T_LOG_VEHICULOS_ARMAR>("exec USP_BUSCAR_PENDIENTE_ENCAJONADO @NRO_MOTOR", p).AsQueryable().ToList();
			return resultado;

		}


        public bool GuardarProcesoArmado(DateTime fecIni,string usuario,int idOrgVta,int idEquipoArmado)
        {
            try
            {
                ContextoDeObjs.ExecuteStoreCommand("exec USP_SAVE_T_LOG_VEHICULO_ARMADO @FEC_INI_ARM={0}, @ID_USU_ARM={1}, @ID_ORG_VTA={2}, @ID_BAHIA_ARM={3}",fecIni,usuario,idOrgVta,idEquipoArmado);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }

        public int NumeroGeneradoGuardarArmado()
        {
            var max = 0;

            try
            {
                max = ContextoDeObjs.T_LOG_VEHICULO_ARMADO_CAB.Select(x => x.ID_ARM_CAB).Max();

            }
            catch (Exception)
            {
                return max;
            }

            return max;
        }

		public IEnumerable<Object> ListarEstadosArmado()
		{

			try
			{
				IEnumerable<Object> Lista = new List<Object>();
				var q = from c in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET
						where c.ID_GENERAL_CAB==40 && c.ID_GENERAL_DET==137 || c.ID_GENERAL_DET==138
						|| c.ID_GENERAL_DET==139
						select c;

				Lista = q.ToList();

				return Lista;

			}
			catch (Exception)
			{

				throw;
			}



		}

		public List<T_LOG_VEHICULOS_ARMADOS> BuscarVehiculosArmados(int estadoArmado,int idCentro,int idEquipo)
		{

			var p = new object[] { new SqlParameter("@ID_ESTADO",estadoArmado), new SqlParameter("@ID_CENTRO",idCentro), new SqlParameter("@ID_EQUIPO",idEquipo)};
			var resultado = ContextoEntidad.ExecuteStoreQuery<T_LOG_VEHICULOS_ARMADOS>("exec USP_BUSCAR_VEHICULOS_ARMADOS @ID_ESTADO, @ID_CENTRO, @ID_EQUIPO", p).AsQueryable().ToList();
			return resultado;

		}

		public bool ActualizarEstadoArmado(int IdVehiculoArmado,int estadoArmado)
		{
			try
			{
				ContextoDeObjs.ExecuteStoreCommand("exec USP_UPDATE_T_LOG_VEHICULO_ARMADO_ESTADO @ID_ARM_CAB={0},@ID_ESTADO={1}", IdVehiculoArmado, estadoArmado);
				return true;
			}
			catch (Exception)
			{

				return false;
			}

		}

		public IEnumerable<Object> ListarEstadosEncajonados()
		{

			try
			{
				IEnumerable<Object> Lista = new List<Object>();
				var q = from c in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET
						where c.ID_GENERAL_CAB == 40 && c.ID_GENERAL_DET == 140 || c.ID_GENERAL_DET ==141 || c.ID_GENERAL_DET == 139
						select c;

				Lista = q.ToList();

				return Lista;

			}
			catch (Exception)
			{

				throw;
			}



		}

		public IEnumerable<Object> EncajonadosPendientes()
		{

			try
			{
				IEnumerable<Object> Lista = new List<Object>();
				var q = from c in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET
						where c.ID_GENERAL_CAB == 40 && c.ID_GENERAL_DET == 138
						select c;

				Lista = q.ToList();

				return Lista;

			}
			catch (Exception)
			{

				throw;
			}



		}


		public List<T_LOG_VEHICULOS_ENCAJONADOS> BuscarVehiculosEncajonados(int estado,int idEquipo,int idCentro)
		{

			var p = new object[] { new SqlParameter("@ID_ESTADO", estado), new SqlParameter("@ID_EQUIPO",idEquipo), new SqlParameter("@ID_CENTRO",idCentro) };
			var resultado = ContextoEntidad.ExecuteStoreQuery<T_LOG_VEHICULOS_ENCAJONADOS>("exec USP_BUSCAR_VEHICULOS_ENCAJONADOS @ID_ESTADO, @ID_EQUIPO,@ID_CENTRO", p).AsQueryable().ToList();
			return resultado;

		}

		public bool ActualizarEstadoEncajonado(int IdEncCab, int estadoEnc)
		{
			try
			{
                ContextoDeObjs.ExecuteStoreCommand("exec USP_UPDATE_T_LOG_VEHICULO_ENCAJONADO_ESTADO @ID_ENC_CAB={0},@ID_ESTADO={1}", IdEncCab, estadoEnc);
				return true;
			}
			catch (Exception)
			{

				return false;
			}

		}

		public IEnumerable<Object> ListarEquipos(string Tipo,int idCentro)
		{

			try
			{
				IEnumerable<Object> Lista = new List<Object>();
				var q = from c in ContextoDeObjs.T_OPE_MAE_EQUIPOS_CAB
						where c.TIPO_EQUIPO==Tipo && c.ID_CENTRO==idCentro
						select c;

				Lista = q.ToList();

				return Lista;

			}
			catch (Exception)
			{

				throw;
			}

		}

        public bool GuardarEncajonadoVehiculos(DateTime fecIni, string usuario, int idOrgVta, int idEquipoEnca)
		{
			try
			{
                ContextoDeObjs.ExecuteStoreCommand("exec USP_SAVE_T_LOG_VEHICULO_ENCAJONADO @FEC_INI_ENC={0}, @ID_USU_ENC={1}, @ID_ORG_VTA={2}, @ID_BAHIA_ENC={3}", fecIni, usuario, idOrgVta, idEquipoEnca);
				return true;
			}
			catch (Exception)
			{

				return false;
			}

		}

        public int NumeroGeneradoGuardarEncajonado()
        {
            var max = 0;

            try
            {
                max = ContextoDeObjs.T_LOG_VEHICULO_ENCAJONADO_CAB.Select(x => x.ID_ENC_CAB).Max();

            }
            catch (Exception)
            {
                return max;
            }

            return max;
        }

		public List<T_LOG_VEHICULOS_ENCAJONADOS> BuscarVehiPendienteEncajonar(int idCentro,string nroMotor)
		{

			var p = new object[] { new SqlParameter("@ID_CENTRO", idCentro), new SqlParameter("@NRO_MOTOR",nroMotor) };
			var resultado = ContextoEntidad.ExecuteStoreQuery<T_LOG_VEHICULOS_ENCAJONADOS>("exec USP_BUSCAR_VEH_PENDIENTE_ENCAJONAR @ID_CENTRO, @NRO_MOTOR", p).AsQueryable().ToList();
			return resultado;
		}


        public List<T_LOG_VEHICULOS_ARMAR> BuscarLote(string nroLote)
        {

            var p = new object[] { new SqlParameter("@NRO_LOTE", nroLote)};
            var resultado = ContextoEntidad.ExecuteStoreQuery<T_LOG_VEHICULOS_ARMAR>("exec USP_BUSCAR_LOTE @NRO_LOTE", p).AsQueryable().ToList();
            return resultado;

        }

        public bool GuardarProcesoArmadoDet(int idArmCab,string nroLote,int item,decimal durItem,int idEstado, string nroMotor, string nroChasis)
        {
            try
            {
                ContextoDeObjs.ExecuteStoreCommand("exec USP_SAVE_T_LOG_VEHICULO_ARMADO_DET @ID_ARM_CAB={0},@NRO_LOTE={1}, @ITEM={2},@DUR_ITEM={3},@ID_ESTADO={4}, @NRO_MOTOR={5}, @NRO_CHASIS={6}", idArmCab,nroLote,item,durItem,idEstado,nroMotor,nroChasis);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }

        public List<T_DET_VEHI_ARMADOS> DetalleVehiArmado(int idCab)
        {

            var p = new object[] { new SqlParameter("@ID_ARM_CAB",idCab) };
            var resultado = ContextoEntidad.ExecuteStoreQuery<T_DET_VEHI_ARMADOS>("exec USP_DET_VEHI_ARMADOS @ID_ARM_CAB", p).AsQueryable().ToList();
            return resultado;

        }

        public IEnumerable<Object> EquiposDeArmado(int idCab)
        {

            try
            {
                IEnumerable<Object> Lista = new List<Object>();
                var q = from c in ContextoDeObjs.T_LOG_VEHICULO_ARMADO_EQUIPO
                        join u in ContextoDeObjs.V_Usuario on c.ID_USUARIO equals u.ID_USUARIO
                        where c.ID_ARM_CAB == idCab && c.TIPO_PROCESO=="Armado"
                        select new 
                        { 
                        ID_ARM_CAB=c.ID_ARM_CAB,
                        USUARIO=u.DES_NOMBRE + " " + u.DES_APELLIDOS
                        };

                Lista = q.ToList();

                return Lista;

            }
            catch (Exception)
            {

                throw;
            }

        }


        public IEnumerable<Object> EquiposDeEncajonado(int idCab)
        {

            try
            {
                IEnumerable<Object> Lista = new List<Object>();
                var q = from c in ContextoDeObjs.T_LOG_VEHICULO_ARMADO_EQUIPO
                        join u in ContextoDeObjs.V_Usuario on c.ID_USUARIO equals u.ID_USUARIO
                        where c.ID_ARM_CAB == idCab && c.TIPO_PROCESO=="Encajonado"
                        select new
                        {
                            ID_ARM_CAB = c.ID_ARM_CAB,
                            USUARIO = u.DES_NOMBRE + " " + u.DES_APELLIDOS
                        };

                Lista = q.ToList();

                return Lista;

            }
            catch (Exception)
            {

                throw;
            }

        }

        public bool GuardarProcesoEncajonadoDet(int idEncCab, string nroLote, int item, decimal durItem, int idEstado, string nroMotor,string nroChasis)
        {
            try
            {
                ContextoDeObjs.ExecuteStoreCommand("exec USP_SAVE_T_LOG_VEHICULO_ENCAJONADO_DET @ID_ENC_CAB={0},@NRO_LOTE={1}, @ITEM={2},@DUR_ITEM={3},@ID_ESTADO={4}, @NRO_MOTOR={5}, @NRO_CHASIS={6}", idEncCab, nroLote, item, durItem, idEstado,nroMotor,nroChasis);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }

        public List<T_DET_VEHI_ARMADOS> DetalleVehiEncajonado(int idCab)
        {

            var p = new object[] { new SqlParameter("@ID_ENC_CAB", idCab) };
            var resultado = ContextoEntidad.ExecuteStoreQuery<T_DET_VEHI_ARMADOS>("exec USP_DET_VEHI_ENCAJONADOS @ID_ENC_CAB", p).AsQueryable().ToList();
            return resultado;

        }


    }
}
